3 * Copyright (c) 2017 Apple Inc. All rights reserved.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #import "SafariExtensionViewController.h"
19 #import "CNDomainBrowserPathUtils.h"
21 @interface SafariExtensionViewController ()
25 @implementation SafariExtensionViewController
27 + (SafariExtensionViewController *)sharedController {
28 static SafariExtensionViewController *sharedController = nil;
29 static dispatch_once_t onceToken;
30 dispatch_once(&onceToken, ^{
31 sharedController = [[SafariExtensionViewController alloc] init];
33 return sharedController;
36 - (void)viewWillAppear
38 [super viewWillAppear];
39 [_domainBrowserView startBrowse];
40 [_mainSplitView adjustSubviews];
43 - (void) viewWillDisappear
45 [super viewWillDisappear];
46 [_domainBrowserView stopBrowse];
49 #pragma mark - BServiceBrowser Delegates
51 - (void)bonjourServiceSelected:(NSString *)service type:(NSString *)type atDomain:(NSString *)domain
53 (void)service; // unused
55 (void)domain; // unused
58 - (void)doubleAction:(NSURL *)url
62 [SFSafariApplication getActiveWindowWithCompletionHandler:^(SFSafariWindow * _Nullable activeWindow) {
63 [activeWindow openTabWithURL: url makeActiveIfPossible: YES completionHandler:^(SFSafariTab * _Nullable tab) {
67 [self dismissPopover];
71 #pragma mark - BonjourBrowser Delegates
73 - (void)domainBrowserDomainUpdate:(NSString *)defaultDomain
75 [_serviceBrowserView newServiceBrowse: DNSDomainToDomainPath(defaultDomain)];
76 if( !_domainBrowserView.selectedDNSDomain.length )
78 [_mainSplitView setPosition: [_mainSplitView maxPossiblePositionOfDividerAtIndex: 0] ofDividerAtIndex: 0];
82 [_mainSplitView adjustSubviews];
83 [_domainBrowserView showSelectedRow];
87 - (void)domainBrowserDomainSelected:(NSString *)domain
89 [_serviceBrowserView newServiceBrowse: DNSDomainToDomainPath(domain)];
92 #pragma mark - SplitView Delegate
94 - (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex
96 (void)splitView; // Unused
99 CGFloat bottomMinHeight = [_domainBrowserView minimumHeight];
101 if( proposedPosition < TOP_MIN )
105 else if( proposedPosition < [_mainSplitView maxPossiblePositionOfDividerAtIndex: dividerIndex] - bottomMinHeight )
107 pos = proposedPosition;
111 pos = [_mainSplitView maxPossiblePositionOfDividerAtIndex: dividerIndex] - bottomMinHeight;
114 // Make sure selected rows stay in view
115 [_domainBrowserView showSelectedRow];
120 - (BOOL)splitView:(NSSplitView *)splitView shouldHideDividerAtIndex:(NSInteger)dividerIndex
122 (void)splitView; // Unused
123 (void)dividerIndex; // Unused
124 return( ![_domainBrowserView foundInstanceInMoreThanLocalDomain] );
127 - (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)view
129 (void)splitView; // Unused
130 (void)view; // Unused
131 return YES; // Having this override seems to make some non-wanted resizes to not occur